Mi a leggyorsabb módszer a java.nio.ByteBuffer a átalakítására egy (újonnan létrehozott) CharBuffer b vagy char [] b formátumra. Ezzel fontos, hogy a [i] == b [i]. Ez azt jelenti, hogy nem egy [i] és egy [i + 1] alkot egy b [j] értéket, amit a getChar (i) tenne, hanem az értékeket "el kell terjeszteni". bájt a [] = {1,2,3, 125,126,127, -128, -127, -126} // mindegyik bájt (aláírva) char b [] = {1,2,3, 125,126,127, 128, 129, 130} // mindegyik egy char (amelyek nincsenek aláírva) Vegye figyelembe, hogy a -128 bájtnak ugyanazok az (alsó 8) bitje van, mint a char: 128-nak. Ezért feltételezem, hogy a "legjobb" értelmezés az lenne, ahogy fentebb megjegyeztem, mert a bitek ugyanazok. Ezt követően szükségem van fordítva: A char [] vagy a java.nio.CharBuffer leghatékonyabb módja egy java.nio.ByteBuffer fájlba.
2021-01-06 08:18:20
Tehát, amit szeretne átalakítani az ISO-8859-1 kódolással. Nem állítok semmit a hatékonyságról, de legalább elég rövid megírni: CharBuffer eredmény = Charset.forName ("ISO-8859-1"). Dekódolás (byteBuffer); A másik irány a következő lenne: ByteBuffer eredmény = Charset.forName ("ISO-8859-1"). Kódolás (charBuffer); Kérjük, mérje ezt össze más megoldásokkal. (Hogy igazságos legyek, a Charset.forName részt nem szabad belefoglalni, és csak egyszer kell megtenni, nem minden pufferhez.) A Java 7-es verziótól kezdve a StandardCharsets osztály is van előre megpéldázott Charset-példányokkal, így használhatja CharBuffer eredmény = StandardCharsets.ISO_8859_1.decode (byteBuffer); és ByteBuffer eredmény = StandardCharsets.ISO_8859_1.encode (charBuffer); helyette. (Ezek a sorok ugyanúgy járnak el, mint korábban, csak a megkeresés könnyebb, és nincs kockázat a nevek hibás beírásával, és nem kell kifogni a lehetetlen kivételeket.) | Egyetértek a @ Ishtar's-szal, javaslom, hogy egyáltalán ne kerüljön áttérésre egy új struktúrára, és csak akkor konvertáljon, amire szüksége van. Ha azonban van egy halom ByteBuffer-je, megteheti. ByteBuffer bb = ... bájt [] tömb = bb.array (); char [] karakterek = új char [bb.remaining ()]; for (int i = 0; i